package 笔试.泰隆银行.楼梯;

import java.util.Scanner;

//dp[i]代表爬到第i个楼梯所需的最小费用
//我们的目标是求解min(dp[0],dp[1]),从下标为0或者下标为1的楼梯开始爬到顶部的最小费用
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String[] s = scan.nextLine().split(",");
        int[] cost = new int[s.length];
        for (int i = 0; i < s.length; i++) {
            cost[i] = Integer.parseInt(s[i]);
        }
        int minCost = minCostClimbing(cost);
        System.out.println(minCost);
    }

    public static int minCostClimbing(int[] cost) {
        int n = cost.length;
        int[] dp = new int[n];
        //初始化dp数组得最后两个元素，分别表示开始时爬到最后一个楼梯和倒数第二个楼梯所需的费用
        dp[n - 1] = cost[n - 1];//从倒数第一个楼梯出发到达顶部的费用
        dp[n - 2] = cost[n - 2];//从倒数第二个楼梯出发到达顶部的费用
        //从倒数第三个楼梯开始遍历，计算每个楼梯道顶部的最小费用
        for (int i = n - 3; i >= 0; i--) {
            //当前楼梯的最小费用=当前楼梯的费用加上后续两个楼梯中的较小费用
            //假设我们已经计算了前i+1个楼梯的最小费用，我们希望计算第i个楼梯的最小费用。
            //我们可以选择跳一步或者跳两步
            //cost[i]是爬到第i个楼梯的费用，我们选择从i+1或i+2处调到第i个楼梯，取较小的费用
            //再加上cost[i],即可得到爬到第i个楼梯所需的最小费用
            dp[i] = cost[i] + Math.min(dp[i + 1], dp[i + 2]);
        }
        //返回起始两个楼梯中的最小费用，即爬到数组最顶端的最小费用
        return Math.min(dp[0], dp[1]);
    }
}
